package com.huaguoguo.cyg.spider.processor.weibo;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.huaguoguo.cyg.converter.StringActionDataConverter;
import com.huaguoguo.cyg.entity.weibo.to.WBDetail;
import com.huaguoguo.cyg.entity.weibo.to.WBFrom;
import com.huaguoguo.cyg.entity.weibo.to.WBMediaWrap;
import com.huaguoguo.cyg.spider.parse.WBDetailParser;
import com.huaguoguo.cyg.spider.processor.BasePageProcessor;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.xsoup.Xsoup;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 类说明： 按用户爬取微博信息<br/>
 *
 * @author: huaguoguo
 * Date: 2019/8/17
 * Time: 14:53
 */
@Slf4j
public class WeiboUserProcessor extends BasePageProcessor {
    /**
     * 主页链接 {}{} 分别是 domain 和 uid
     * domain : 很多地方用到，都是固定值 100505
     * uid : 应该是用户id
     * is_hot : 是否热门微博 1是热门
     * page : 当前页
     */
    private String homeUrlTemplate = "https://weibo.com/p/{}{}/home?is_hot={}&page={}";
    private String homeUrl;
    /**
     * 每一页可以下拉两次
     * 两次下拉加载时， pagebar： 0 -> 1 page和pre_page都是当前页码
     * id : domain+uid
     */
    private String pageUrlTemplate = "http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain={}&pagebar={}&id={}{}&page={}&pre_page={}&is_hot={}";

    @Override
    public void process(Page page) {
        // xsoup
        Document document = page.getHtml().getDocument();
        // 1. 获取所有script标签的内容
        List<String> scriptList = Xsoup.compile("//script/html()").evaluate(document).list();
        // 2. 筛选出微博内容的script
        String plOfficialMyProfileFeed22 = scriptList.stream()
                .filter(s -> s.contains("pl.content.homeFeed.index") && s.contains("Pl_Official_MyProfileFeed__22"))
                .map(s -> StrUtil.strip(s, "FM.view(", ""))
                .findFirst().get();
        // 3. 从这个json中提取出html内容
        String html = JSONUtil.parse(plOfficialMyProfileFeed22).getByPath("html", String.class);
        // 4. 用jsoup转化成document
        Document content = Jsoup.parse(html);
        // 5. 开始解析
        List<WBDetail> wbList = WBDetailParser.parseHtmlToWBDetail(content);
        // 6. 交给pipeline去处理
        page.putField("wbList",wbList);
    }


    /**
     * 构建一个完整的请求链接
     *
     * @return
     */
    @Override
    public String buildRequestUrl() {
        this.homeUrl =
                StrUtil.format(homeUrlTemplate, data.get("domain"), data.get("uid"), data.get("isHot"), data.get("page"));
        return homeUrl;
    }

    /**
     * 构建下拉url
     * http://weibo.com/p/aj/v6/mblog/mbloglist?ajwvr=6&domain={}&pagebar={}&id={}{}&page={}&pre_page={}&is_hot={}";
     *
     * @return
     */
    public String buildPageUrl(int num) {
        return StrUtil.format(
                pageUrlTemplate,
                data.get("domain"), num, data.get("domain"), data.get("uid"), data.get("page"), data.get("page"), data.get("isHot")
        );
    }
}
